﻿//------------------------------------------------------------
// Author: 烟雨迷离半世殇
// Mail: 1778139321@qq.com
// Data: 2019年12月31日 12:20:46
//------------------------------------------------------------

using System;
using System.Collections.Generic;


namespace NKG_MVVM_UI
{
    public class ViewModelFactory
    {
        public static Dictionary<Type, Queue<AViewModel>> ViewModelPool =
            new Dictionary<Type, Queue<AViewModel>>();

        public static T FetchViewModel<T>() where T : AViewModel
        {
            AViewModel tempAViewModel;
            if (ViewModelPool.TryGetValue(typeof(T), out var tempViewModelQueue))
            {
                tempAViewModel = tempViewModelQueue.Dequeue();
                tempAViewModel.OnInit();
                return (T) tempAViewModel;
            }

            tempAViewModel = Activator.CreateInstance<T>();
            Queue<AViewModel> newViewModelQueue = new Queue<AViewModel>();
            newViewModelQueue.Enqueue(tempAViewModel);
            ViewModelPool.Add(typeof(T), newViewModelQueue);

            tempAViewModel.OnInit();
            return (T) tempAViewModel;
        }

        public static void RecycleViewModel(AViewModel aViewModel)
        {
            aViewModel.OnRecycle();
            if (ViewModelPool.TryGetValue(aViewModel.GetType(), out var tempViewModelQueue))
            {
                tempViewModelQueue.Enqueue(aViewModel);
            }
            else
            {
                Console.WriteLine($"不应当，一个VM对象应该生于工程创建，死于工厂回收，请检查逻辑错误！");
                Queue<AViewModel> newViewModelQueue = new Queue<AViewModel>();
                newViewModelQueue.Enqueue(aViewModel);
                ViewModelPool.Add(aViewModel.GetType(), newViewModelQueue);
            }
        }
    }
}